FUNCTION SELECTION_SORT : BOOL
  VAR_INPUT
    // 指向待排序整数数组的引用
    pData : REF_TO INT;
    // 数组元素个数
    udiSize : UDINT;
  END_VAR

  VAR
    // 外层循环计数器
    i : UDINT;
    // 内层循环计数器
    j : UDINT;
    // 最小元素的索引
    minIndex : UDINT;
    // 交换时的临时变量
    temp : INT;
  END_VAR

  // 检查输入参数有效性
  IF pData = 0 OR udiSize <= 1 THEN
    SELECTION_SORT := FALSE;
    RETURN;
  END_IF;

  // 选择排序算法
  FOR i := 0 TO udiSize - 2 DO
    // 假设当前位置的元素是最小的
    minIndex := i;
    
    // 在未排序的部分中寻找最小元素
    FOR j := i + 1 TO udiSize - 1 DO
      IF (pData+j)^ < (pData+minIndex)^ THEN
        minIndex := j;
      END_IF;
    END_FOR;
    
    // 如果找到更小的元素，则交换
    IF minIndex <> i THEN
      temp := (pData+i)^;
      (pData+i)^ := (pData+minIndex)^;
      (pData+minIndex)^ := temp;
    END_IF;
  END_FOR;

  SELECTION_SORT := TRUE;

END_FUNCTION
